home *** CD-ROM | disk | FTP | other *** search
- DEBUG EQU 0
- ;********************************************************
- ;
- ; ☆★☆ ヘッド表示プログラム ☆★☆
- ;
- ; by Yasu.Hara.
- ;
- ; Ver1.23 (1990/10/09)
- ;
- ;********************************************************
- ASSUME CS:CSEG,DS:DSEG,SS:SSEG
- ;********************************************************************
- IF DEBUG
- PUBLIC OFFSETX,OFFSETY,ZOOM,PADWORK,INPUT_KEY
- READPAG EQU 10
- DRIVE EQU 'H'
- ELSE
- READPAG EQU 100
- DRIVE EQU 'Q'
- ENDIF
- READNUM EQU READPAG*10
- HEADLEN EQU 512*3*READNUM
- PALTLEN EQU 32*3
- IMG_LEN EQU 128*1024
- EGBSIZE EQU 1536
- ;********************************************************************
- CSEG SEGMENT DWORD PUBLIC USE32 'CODE'
-
- AND ESP,-4
- MOV AX,110H
- MOV FS,AX
-
- ;ドライブ R ガ アルカ チェック
- MOV AX,3D00H
- MOV EDX,OFFSET RUN386
- INT 21H
- SETNC BYTE PTR [EXIST_R]
- ;
- MOV BX,AX
- MOV AH,3EH
- INT 21H
-
- ;CD ドライブ テイシ ジカン ノ セッテイ
- MOV DL,1
- CALL CD_TIME
-
- ;シリンダ 0 ヘノ シーク
- SEEK_0:
- MOV AX,3C0H
- MOV CH,0
- INT 93H
- TEST AH,AH
- JNZ SEEK_0
-
- ;キーボードクリック オン ノ セイギョ
- MOV AX,501H
- INT 90H
-
- ;FM オンゲン ノミノ ショキカ
- MOV AH,30H
- CALL SOUND_CALL
-
- ;グラフィック ショキカ
- MOV AH,0
- MOV ECX,EGBSIZE
- CALL EGB_CALL
-
- ;カソウガメン ノ セッテイ
- MOV AX,100H
- MOV DX,10
- CALL EGB_CALL
- MOV AX,101H
- MOV DX,5
- CALL EGB_CALL
-
- CALL OFFSET_0
-
- ;ビョウガショク ノ セッテイ
- MOV AX,701H
- MOV DX,7FFFH
- CALL EGB_CALL
-
- ;スプライト ショキカ
- CALL INIT_SPRITE
-
- ;
- CALL CLEAR_SCREEN
- JMP SHORT RETRY
-
- ;CD-ROM リードエラー
- ERROR_TRAP:
- MOV ESI,OFFSET ERROR_$
- CALL PRINT_MSG
- ;
- MOV AX,900H
- INT 90H
-
- ;データリード ノ リトライ
- RETRY:
- MOV ESI,OFFSET WAIT_$
- CALL PRINT_MSG
-
- ;パレット データ ヲ メモリー ヘ ヨミコム
- MOV AX,3D00H
- MOV EDX,OFFSET PALTFIL
- INT 21H
- JC ERROR_TRAP
- ;
- MOV BX,AX
- MOV AH,3FH
- MOV ECX,PALTLEN
- MOV EDX,OFFSET PALTWRK
- INT 21H
- JC ERROR_TRAP
- ;
- MOV AH,3EH
- INT 21H
- JC ERROR_TRAP
-
- ;ヘッド データ ヲ メモリー ヘ ヨミコム
- MOV AX,3D00H
- MOV EDX,OFFSET HEADFIL
- INT 21H
- JC ERROR_TRAP
- MOV [HANDLE],AX
- ;
- MOV BX,AX
- MOV AX,4202H
- XOR ECX,ECX
- XOR EDX,EDX
- INT 21H
- JC ERROR_TRAP
- ;
- MOV CX,512*3
- DIV CX
- MOV [HEADMAX],AX
- MOV EDI,OFFSET MAX_$
- CALL CONVERT_D
- ;
- CALL READ_CD
-
- ;ガメン ノ ヒョウジ
- MOV AX,101H
- MOV CX,120
- CALL SPRITE_CALL
-
- ;アトリビュート セッテイ
- MOV BX,3*10
- MOV CX,1024-120
- ATTR_SET:
- MOV AH,5
- MOV DX,202H
- LEA ESI,[ECX+8000H]
- MOV DI,8100H
- CALL SPRITE_CALL
- ADD CX,4
- DEC BX
- JNZ SHORT ATTR_SET
-
- ;イチ セッテイ
- MOV CX,1024-120
- XOR EBP,EBP
- XYZSET_X:
- MOV DI,46
- MOV BH,5
- XYZSET_Y:
- MOV SI,BP
- MOV BL,3
- XYZSET_Z:
- MOV AX,400H
- MOV DX,202H
- CALL SPRITE_CALL
- ADD CX,4
- ADD SI,33
- DEC BL
- JNZ SHORT XYZSET_Z
- ADD DI,36
- DEC BH
- JNZ SHORT XYZSET_Y
- TEST EBP,EBP
- MOV BP,136
- JZ SHORT XYZSET_X
- ;
- CALL CLEAR_SCREEN
- MOV ESI,OFFSET LINE$
- CALL PRINT_MSG
-
- ;
- MAIN_LOOP:
- XOR EDX,EDX
- MOV AX,[HEADNUM]
- DEC AX
- MOV CX,10
- DIV CX
- IMUL AX,CX
- MOV [HEADOFF],AX
- XOR EDX,EDX
- MOV CX,READNUM
- DIV CX
- CMP [HPAGE],AX
- JZ SHORT SAME_PAGE
- MOV [HPAGE],AX
- CALL READ_CD
- SAME_PAGE:
- XOR EBX,EBX
- MOV EDI,OFFSET NUMBER$
- NUM_LOOP:
- INC BL
- ADD EDI,6
- MOV AX,[HEADOFF]
- ADD AX,BX
- CMP AX,[HEADMAX]
- JBE SHORT NUM_LOOP1
- MOV EAX,20202020H
- STOSD
- JMP SHORT NUM_LOOP2
- NUM_LOOP1:
- CALL CONVERT_D
- NUM_LOOP2:
- CMP BL,10
- JNZ SHORT NUM_LOOP
- ;
- MOV ESI,OFFSET NUMBER$
- CALL PRINT_MSG
- ;スプライト ノ テイギ
- MOV BH,10
- MOV CX,1024-120
- MOV BP,[HEADOFF]
- DEF_LOOP:
- MOV ESI,OFFSET CLR_PAT
- XOR EDI,EDI
- CMP BP,[HEADMAX]
- JNC SHORT DEF_CLR
- XOR EDX,EDX
- MOV AX,BP
- MOV SI,READNUM
- DIV SI
- MOVZX EAX,DX
- SAL EAX,9
- LEA ESI,[EAX+EAX*2+HEADWRK]
- MOV DI,512
- DEF_CLR:
- MOV BL,3
- DEF_DRCTN:
- MOV AX,200H
- MOV DX,202H
- CALL SPRITE_CALL
- ADD ESI,EDI
- ADD CX,4
- DEC BL
- JNZ SHORT DEF_DRCTN
- INC BP
- DEC BH
- JNZ SHORT DEF_LOOP
-
- ;パレットブロック ノ セッテイ
- MAIN_LOOP2:
- MOVZX ESI,BYTE PTR [PALTNUM]
- SAL SI,5
- ADD ESI,OFFSET PALTWRK
- MOV AH,3
- MOV CX,256
- MOV DX,1
- CALL SPRITE_CALL
-
- ;
- INPUT_KEY:
- MOV AX,901H
- INT 90H
- MOV BX,[PALTNUM]
- MOV CX,[HEADNUM]
- CMP DL,'0'
- JC SHORT NOT_NUMBER
- CMP DL,'9'+1
- JC NUMBER_KEY
- NOT_NUMBER:
- CMP DL,0DH
- JZ RETURN_KEY
- SUB DL,1BH
- JZ ESCAPE_KEY
- DEC DL
- JZ RIGHT_ARROW
- DEC DL
- JZ LEFT_ARROW
- DEC DL
- JZ UP_ARROW
- DEC DL
- JZ DOWN_ARROW
- DEC DL
- JNZ SHORT NOT_SPACE_KEY
- CALL ZOOM_0
- JMP SHORT INPUT_KEY
- ;
- NOT_SPACE_KEY:
- MOV BL,3FH
- MOV DH,1
- PAD_LOOP:
- MOV AH,40H
- CALL SOUND_CALL
- TEST DL,0FH
- JZ SHORT PAD_SKIP
- AND BL,DL
- PAD_SKIP:
- DEC DH
- JZ SHORT PAD_LOOP
- ;
- MOV DL,BYTE PTR [PADWORK]
- OR DL,0FH
- MOV BYTE PTR [PADWORK],BL
- NOT BL
- AND BL,DL
- JZ INPUT_KEY
- ;
- MOV AX,[ZOOM]
- TEST BL,20H
- JZ SHORT NOT_ZOOM_DOWN
- DEC AL
- NOT_ZOOM_DOWN:
- TEST BL,10H
- JZ SHORT NOT_ZOOM_UP
- INC AL
- NOT_ZOOM_UP:
- CMP AL,15
- JNC SHORT NOT_ZOOM
- CMP AX,[ZOOM]
- JZ SHORT NOT_ZOOM
- MOV [ZOOM],AX
- CALL DISP_START
- JMP INPUT_KEY
- ;
- NOT_ZOOM:
- MOV AX,[OFFSETX]
- TEST BL,8
- JZ SHORT NOT_RIGHT
- INC AX
- NOT_RIGHT:
- TEST BL,4
- JZ SHORT NOT_LEFT
- DEC AX
- NOT_LEFT:
- CMP AX,200
- JZ SHORT NOT_RL
- CMP AX,-40
- JZ SHORT NOT_RL
- MOV [OFFSETX],AX
- NOT_RL:
- ;
- MOV AX,[OFFSETY]
- TEST BL,2
- JZ SHORT NOT_UP
- INC AX
- NOT_UP:
- TEST BL,1
- JZ SHORT NOT_DOWN
- DEC AX
- NOT_DOWN:
- CMP AX,208
- JNC SHORT NOT_UD
- MOV [OFFSETY],AX
- NOT_UD:
- ;
- CALL OFFSET_CHG
- JMP INPUT_KEY
-
- RETURN_KEY:
- MOV BL,2
- UP_ARROW:
- SUB BL,2
- DOWN_ARROW:
- INC BL
- CMP BL,3
- JNC INPUT_KEY
- MOV [PALTNUM],BX
- ;
- ADD BL,'0'
- MOV [PAL_$],BL
- ;
- MOV ESI,OFFSET ATTR_$
- CALL PRINT_MSG
- ;
- JMP MAIN_LOOP2
-
- RIGHT_ARROW:
- ADD CX,20
- LEFT_ARROW:
- SUB CX,10
- CHK_NUM:
- JZ INPUT_KEY
- CMP CX,[HEADMAX]
- JA INPUT_KEY
- MOV [HEADNUM],CX
- JMP MAIN_LOOP
-
- NUMBER_KEY:
- SUB DL,'0'
- MOVZX CX,DL
- MOV AX,[INPUT]
- XOR EDX,EDX
- MOV BX,1000
- DIV BX
- IMUL DX,10
- ADD CX,DX
- MOV [INPUT],CX
- JMP CHK_NUM
-
- ESCAPE_KEY:
- ;セイジョウ シュウリョウ
- MOV AH,3EH
- MOV BX,[HANDLE]
- INT 21H
- ;
- MOV AX,100H
- MOV CX,120
- CALL SPRITE_CALL
- ;
- CALL OFFSET_0
- ;
- MOV EDX,1
- CALL DISP_PAGE
- ;
- MOV AX,[EXIST_R]
- TEST AX,AX
- JNZ SHORT RETRY2
- ;
- CALL CLEAR_SCREEN
- MOV ESI,OFFSET EXIT_$
- CALL PRINT_MSG
- ;
- MOV AX,900H
- INT 90H
- ;
- JMP SHORT EXIT_PRG
- ;
- ERROR_TRAP2:
- CALL CLEAR_SCREEN
- MOV ESI,OFFSET ERROR2$
- CALL PRINT_MSG
- ;
- MOV AX,900H
- INT 90H
- ;
- ;DRIVE_R.IMG ヲ ヨミコム
- RETRY2:
- CALL CLEAR_SCREEN
- MOV ESI,OFFSET TMENU_$
- CALL PRINT_MSG
- ;
- MOV AX,3D00H
- MOV EDX,OFFSET DRIVE_R
- INT 21H
- JC ERROR_TRAP2
- ;
- MOV BX,AX
- MOV AX,130H
- MOV DS,AX
- MOV AH,3FH
- MOV ECX,IMG_LEN
- XOR EDX,EDX
- INT 21H
- MOV AX,14H
- MOV DS,AX
- JC ERROR_TRAP2
- ;
- MOV AH,3EH
- INT 21H
- JC ERROR_TRAP2
- EXIT_PRG:
- ;CD ドライブ テイシ ジカン ノ セッテイ
- MOV DL,20
- CALL CD_TIME
- ;
- MOV AX,4C00H
- INT 21H
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- CD_TIME:
- MOV AX,52C0H
- MOV CH,0FFH
- MOV CL,DL
- INT 93H
- TEST AH,AH
- JNZ CD_TIME
- RET
-
- READ_CD:
- MOV AX,4200H
- MOV BX,[HANDLE]
- MOVZX ECX,[HPAGE]
- IMUL ECX,HEADLEN
- MOV DX,CX
- SHR ECX,16
- INT 21H
- ;
- MOV AH,3FH
- MOV BX,[HANDLE]
- MOV ECX,HEADLEN
- MOV EDX,OFFSET HEADWRK
- INT 21H
- RET
-
- ;ヒョウジカイシイチ ノ セッテイ
- OFFSET_0:
- XOR EAX,EAX
- MOV [OFFSETX],AX
- MOV [OFFSETY],AX
- ZOOM_0:
- MOV [ZOOM],0
- DISP_START:
- MOV CX,[ZOOM]
- ADD CX,2
- ;
- CALL WRITE_PAGE_1
- ;
- XOR EDX,EDX
- CALL DISP_PAGE
- ;
- MOV AX,202H
- MOV DX,CX
- MOV BX,CX
- CALL EGB_CALL
- ;
- MOV AX,200H
- XOR EDX,EDX
- XOR EBX,EBX
- CMP AH,CL
- JZ SHORT ZOOM_ZERO
- ;
- CALL EGB_CALL
- ;
- MOV AX,203H
- MOV DX,256
- MOV BX,240
- JMP SHORT ZOOM_ELSE
- ;
- ZOOM_ZERO:
- MOV AL,3
- MOV DX,256
- MOV BX,240
- CALL EGB_CALL
- ;
- MOV AX,200H
- MOV DX,64
- XOR EBX,EBX
- ZOOM_ELSE:
- CALL EGB_CALL
- ;
- CALL WRITE_PAGE_0
- ;
- MOV AX,202H
- MOV DX,CX
- MOV BX,CX
- CALL EGB_CALL
- ;
- MOV AX,203H
- MOV DX,320
- MOV BX,256
- CALL EGB_CALL
- ;
- OFFSET_CHG:
- CALL WRITE_PAGE_1
- ;
- MOV AH,7
- XOR ESI,ESI
- XOR EDI,EDI
- XOR EDX,EDX
- CMP DX,[ZOOM]
- JNZ SHORT OFFSET_ON
- ;
- CALL SPRITE_CALL
- ;
- MOV AX,201H
- XOR EBX,EBX
- CALL EGB_CALL
- ;
- JMP SHORT OFFSET_NO
- ;
- OFFSET_ON:
- SUB SI,[OFFSETX]
- CALL SPRITE_CALL
- ;
- MOV AX,201H
- MOV BX,[OFFSETY]
- CALL EGB_CALL
- ;
- MOV DX,[OFFSETX]
- ADD DX,64
- OFFSET_NO:
- CALL WRITE_PAGE_0
- ;
- MOV AX,201H
- CALL EGB_CALL
- ;
- MOV EDX,3
- ;ヒョウジ ページ ノ シテイ
- DISP_PAGE:
- MOV AX,601H
- JMP SHORT EGB_CALL
-
- ;カキコミ ページ 0
- WRITE_PAGE_0:
- MOV AX,500H
- JMP SHORT EGB_CALL
-
- ;カキコミ ページ 1
- WRITE_PAGE_1:
- MOV AX,501H
- JMP SHORT EGB_CALL
-
- ;ゼンガメン ノ ショウキョ
- CLEAR_SCREEN:
- MOV AH,20H
- EGB_CALL:
- MOV EDI,OFFSET EGBWORK
- CALL PWORD PTR FS:[20H]
- RET
-
- ;スプライト ショキカ
- INIT_SPRITE:
- MOV AH,0
- SPRITE_CALL:
- CALL PWORD PTR FS:[60H]
- RET
-
- SOUND_CALL:
- CALL PWORD PTR FS:[80H]
- RET
-
- FONT_CALL:
- CALL PWORD PTR FS:[0A0H]
- RET
-
- ;モジレツ ヒョウジ
- PRINT_MSG:
- CALL SJISSTRING
- MOVZX EAX,WORD PTR [ESI+4]
- LEA ESI,[ESI+EAX+6]
- MOV AX,[ESI]
- INC AX
- JNZ SHORT PRINT_MSG
- RET
-
- ;10シンスウ 4ケタ コンバート
- CONVERT_D:
- MOV CL,4
- MOV ESI,OFFSET DECIMAL
- CON_LOOP:
- XOR EDX,EDX
- DIV WORD PTR [ESI]
- OR AL,'0'
- STOSB
- MOV AX,DX
- ADD ESI,2
- DEC CL
- JNZ SHORT CON_LOOP
- RET
-
- ;EGB_sjisString コウソク バン
- SJISSTRING:
- PUSHAD
- XOR EAX,EAX
- LODSW
- MOV EDI,EAX
- LODSW
- SUB AL,15
- SHL EAX,10
- LEA EDI,[EAX+EDI*2]
- LODSW
- MOV CX,AX
- DEC CX
- JS SJISSTRING9
- MOV AX,1CH
- MOV ES,AX
- SJISSTRING1:
- LODSB
- DEC CX
- TEST AL,AL
- JS SHORT SJISSTRING2
- PUSH ESI
- MOV BL,AL
- XOR EAX,EAX
- MOV DX,810H
- CALL FONT_CALL
- JMP SHORT SJISSTRING3
- SJISSTRING2:
- MOV BH,AL
- LODSB
- DEC CX
- PUSH ESI
- MOV BL,AL
- MOV AH,2
- CALL FONT_CALL
- MOV AX,100H
- MOV DX,1010H
- CALL FONT_CALL
- SJISSTRING3:
- MOV BP,DX
- MOV EBX,EDI
- SJISSTRING4:
- LODSB
- NOT AL
- MOV DL,AL
- REPT 8
- ADD DL,DL
- SBB EAX,EAX
- STOSW
- ENDM
- SUB DH,8
- JNZ SJISSTRING4
- LEA EDI,[EBX+400H]
- MOV DX,BP
- DEC DL
- JNZ SJISSTRING3
- MOVZX EAX,DH
- LEA EDI,[EDI+EAX*2-4000H]
- POP ESI
- MOV AX,14H
- MOV DS,AX
- TEST CX,CX
- JNS SJISSTRING1
- MOV ES,AX
- SJISSTRING9:
- POPAD
- RET
-
- CSEG ENDS
- ;********************************************************************
- DSEG SEGMENT DWORD PUBLIC USE32 'DATA'
-
- PALTFIL DB DRIVE,':\DATA\PALETTE.32K',0
- HEADFIL DB DRIVE,':\DATA\HEAD.DAT',0
- DRIVE_R DB 'Q:\DRIVE_R.IMG',0
- RUN386 DB 'R:\RUN386.EXE',0
-
- WAIT_$ DW 16,100,36
- DB '★☆★ ヘッド表示 Ver1.23 ★☆★'
- DW 16,120,36
- DB 'Programmed by Yasu.Hara.'
- DW 16,140,36
- DB 'CDからデータを読み込んでいま~っす'
- DW 16,160,36
- DB '♪~~しばらくお待ちくださいね~~♪'
- DW -1
-
- ERROR_$ DW 16,140,36
- DB '富士通HabitatのCD-ROMを'
- DW 16,160,36
- DB '入れてから、何かキーを押してください'
- DW -1
-
- TMENU_$ DW 16,120,36
- DB '《Towns-MENU》に戻りま~す'
- DW 16,140,36
- DB '♪~~ちょっとお待ちくださいね~~♪'
- DW -1
-
- ERROR2$ DW 16,100,36
- DB 'スプライトメモリ(DRIVE R)に'
- DW 16,120,36
- DB 'RUN386.EXE を再ロードします'
- DW 16,140,36
- DB '<Towns-OS V1.1 L20> のCD-ROMを'
- DW 16,160,36
- DB '入れてから、何かキーを押してください'
- DW -1
-
- EXIT_$ DW 16,110,36
- DB '『ヘッド表示プログラム』を終了します'
- DW 16,130,36
- DB '必要ならば、CD-ROMを入れ替えて'
- DW 16,150,36
- DB '準備できたら何かキーを押してください'
- DW -1
-
- LINE$ DW 32,40,32
- DB 'ヘッドの種類:'
- MAX_$ DB ' パレット番号:1'
- DW -1
-
- ATTR_$ DW 32+8*31,40,1
- PAL_$ DB ' '
- DW -1
-
- NUMBER$ DW 32,68,4
- DB ' '
- DW 32,68+36,4
- DB ' '
- DW 32,68+36*2,4
- DB ' '
- DW 32,68+36*3,4
- DB ' '
- DW 32,68+36*4,4
- DB ' '
- DW 32+136,68,4
- DB ' '
- DW 32+136,68+36,4
- DB ' '
- DW 32+136,68+36*2,4
- DB ' '
- DW 32+136,68+36*3,4
- DB ' '
- DW 32+136,68+36*4,4
- DB ' '
- DW -1
-
- EVEN
-
- DECIMAL DW 1000,100,10,1
-
- CLR_PAT DB 512 DUP(0)
-
- OFFSETX DW 0
- OFFSETY DW 0
- ZOOM DW 0
- PADWORK DW 0
- PALTNUM DW 1
- INPUT DW 0
- HPAGE DW 0
- HEADNUM DW 1
- HEADOFF DW 0
- HEADMAX DW 0
- HANDLE DW 0
- EXIST_R DW 0
-
- EGBWORK DB EGBSIZE DUP(?)
- PALTWRK DB PALTLEN DUP(?)
- HEADWRK DB HEADLEN DUP(?)
-
- DSEG ENDS
- ;********************************************************************
- SSEG SEGMENT DWORD STACK USE32 'STACK'
-
- DB 1000H DUP(?)
-
- SSEG ENDS
- ;********************************************************************
- END